Laravel ORM VS Phalcon ORM


前言

由于php5逐步停止维护,公司由于技术发展得需要,需要从只支持php5的CI2框架,迁移到支持php7以上的高性能phalcon框架,本来是一件非常美好的事情,但迁移后无奈phalcon的原生ORM实在太难用了,希望引入更加易用的第三方ORM工具,于是开始了以下调研之旅。

调研结果

Laravel ORM 开发效率高(原本同事写了2天的代码2小时重构完成)
Phalcon 原生ORM性能强, 做压力测试50次大数据量传输请求,laravel ORM耗时50秒,phalcon 17秒。
性能差距甚大,不由感叹phalcon框架性能强大。

以下面这段代码为例测试性能:

代码:

原生phalcon 操作

<?php
echo "内存初始状态:".$this->format_bytes(memory_get_usage()) . '
';

//Phalcon 查询10条数据
$res = Boxes::query()->createBuilder()
    ->limit(10)
    ->getQuery()
    ->execute()
    ->toArray();

echo "查询结束内存状态:".$this->format_bytes(memory_get_usage());

Laravel ORM 操作

<?php
echo "内存初始状态:".$this->format_bytes(memory_get_usage()) . '
';

//Laravel ORM 查询10条数据
$res = Boxes::query()->limit(10)->get()->toArray();

echo "查询结束内存状态:".$this->format_bytes(memory_get_usage());
<?php
echo "内存初始状态:".$this->format_bytes(memory_get_usage()) . '
';

//Laravel ORM 查询10条数据
$res = $this->mysql::select('select * from boxes limit 100');

echo "查询结束内存状态:".$this->format_bytes(memory_get_usage());

耗时情况比较

在Phalcon框架原生query builder:

在Phalcon框架中引入 Laravel Eloquent ORM:

在Phalcon框架中使用 Laravel Eloquent ORM 的原生sql操作:

由 上图可见,引入ORM之后,查询性能明显比原生ORM延迟近3倍(原生ORM14秒,Laravel ORM 36秒)

内存使用情况

原生phalcon 查询10条数据操作

内存初始状态:1.21 MB
查询结束内存状态:1.3 MB

Laravel ORM 查询10条数据操作

内存初始状态:1.2 MB
查询结束内存状态:5.54 MB

原生phalcon 查询100条数据查询操作

内存初始状态:1.21 MB
查询结束内存状态:1.47 MB

Laravel ORM 查询100条数据操作

内存初始状态:1.2 MB
查询结束内存状态:5.72 MB

Laravel ORM 使用原生sql语句 查询100条数据操作

内存初始状态:1.2 MB
查询结束内存状态:2.83 MB

观察一下两个ORM请求到sql的语句分别有什么

接下来我们测试一下100次请求中,向mysql请求的次数(包括数据库连接,选择数据库,查询,退出数据库):

  1. Laravel ORM :1351
  2. Phalcon 原生: 1351,
    也就是不是数据库查询次数的原因。
set names 'utf8' collate 'utf8_unicode_ci'

select * from `tickets` limit 10

use `owdile001`

root@120.111.11.111 on owdile001 using TCP/IP
SELECT `tickets`.`id`, `tickets`.`xxx_id`, `tickets`.`type` FROM `tickets` LIMIT 10

DESCRIBE `tickets`

SET NAMES utf8

root@120.111.11.111 on owdile001 using TCP/IP

正常用户体验:

模拟两个用户同时使用,一共请求10次,每次请求存在两次sql查询

原生

Total time passed:            2.17s
Avg time per request:        373.80ms
Requests per second:        4.62
Median time per request:    344.23ms
99th percentile time:        315.96ms
Slowest time for request:    480.00ms

Eloquent

Total time passed:        4.11s
Avg time per request:        706.96ms
Requests per second:        2.43
Median time per request:    666.99ms
99th percentile time:        574.17ms
Slowest time for request:    871.00ms

Author: Carp Choi
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Carp Choi !
 Current
Laravel ORM VS Phalcon ORM Laravel ORM VS Phalcon ORM
前言由于php5逐步停止维护,公司由于技术发展得需要,需要从只支持php5的CI2框架,迁移到支持php7以上的高性能phalcon框架,本来是一件非常美好的事情,但迁移后无奈phalcon的原生ORM实在太难用了,希望引入更加易用的第三方
2020-06-18
Next 
coredns 概念原理与使用 coredns 概念原理与使用
WHY ? kuberntes 中的 pod 基于 service 域名解析后,再负载均衡分发到 service 后端的各个 pod 服务中,如果没有 DNS 解析,则无法查到各个服务对应的 service 服务 在 Kubernetes
2020-04-13